{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Step-49"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is a replica of [step-49](https://www.dealii.org/current/doxygen/deal.II/step_49.html) C++ turorial program. However, here we will use the deal.II Python interface to achieve the same. \n",
    "\n",
    "Not all of the material is replicated since some parts of the original C++ tutorial are only relevant when using C++. Furthermore, in contrast to the C++ program, here we will take advantage of Jupyter notebook format and do coding and visualization in place.\n",
    "\n",
    "*This notebook is contributed by Alexander Grayver, 2020*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Python initialization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Provided the deal.II was compiled with the python wrappers, we can import the module **PyDealII**. Note that it is only a shell and importing it will only allow you to call\n",
    "```python \n",
    "help(PyDealII)\n",
    "``` \n",
    "**PyDealII** is composed of two libraries: \n",
    " - **PyDealII.Debug** which uses the debug version of **deal.II**\n",
    " - **PyDealII.Release** which uses the release version of **deal.II**\n",
    " \n",
    "Let's us import the release version of the library and give it the shortname **dealii**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import PyDealII.Release as dealii"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition, we will import a few widely used python packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "import numpy as np\n",
    "import re\n",
    "import math\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, here are a couple of functions, which we will use to plot a triangulation or print some information about it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.patches import Polygon\n",
    "from matplotlib.collections import PatchCollection\n",
    "\n",
    "def plot_triangulation(triangulation, color_scheme = None):\n",
    "    fig, ax = plt.subplots()\n",
    "    patches = []\n",
    "    colors = []\n",
    "    cell_id = 0 \n",
    "    for cell in triangulation.active_cells():\n",
    "        quad_vertices = np.zeros((4,2))\n",
    "        # The shift variable is used to reorder the vertices because\n",
    "        # deal.II and matplotlib require different ordering\n",
    "        shift = [0,1,3,2]\n",
    "        for i in range(4):\n",
    "            vertex = cell.get_vertex(i)\n",
    "            quad_vertices[shift[i]][0] = vertex.x\n",
    "            quad_vertices[shift[i]][1] = vertex.y\n",
    "        quad = Polygon(quad_vertices, closed=True)\n",
    "        patches.append(quad)\n",
    "        \n",
    "        if color_scheme:\n",
    "            colors.append(color_scheme(cell))\n",
    "\n",
    "        cell_id += 1\n",
    "    p = PatchCollection(patches, edgecolors='k', facecolors=None)  \n",
    "    p.set_array(np.array(colors))\n",
    "    ax.add_collection(p, autolim=True)\n",
    "    ax.autoscale_view()\n",
    "    ax.set_aspect(1)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You don't need to understand internals of these functions, they are used as mere helpers here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tutorial is an extension to [step-1](https://www.dealii.org/current/doxygen/deal.II/step_1.html) and demonstrates several ways to obtain more involved meshes than the ones shown there.\n",
    "\n",
    "Generating complex geometries is a challenging task, especially in three space dimensions. We will discuss several ways to do this, but this list is not exhaustive. Additionally, there is not one approach that fits all problems.\n",
    "\n",
    "This example program shows some of ways to create and modify meshes for computations and outputs them as .vtu files in much the same way as we do in [step-1](https://www.dealii.org/current/doxygen/deal.II/step_1.html). No other computations or adaptive refinements are done; the idea is that you can use the techniques used here as building blocks in other, more involved simulators. Please note that the example program does not show all the ways to generate meshes that are discussed in this introduction."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### General concerns about meshes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When you use adaptive mesh refinement, you definitely want the initial mesh to be as coarse as possible. The reason is that you can make it as fine as you want using adaptive refinement as long as you have memory and CPU time available. However, this requires that you don't waste mesh cells in parts of the domain where they don't pay off. As a consequence, you don't want to start with a mesh that is too fine to start with, because that takes up a good part of your cell budget already, and because you can't coarsen away cells that are in the initial mesh.\n",
    "\n",
    "That said, your mesh needs to capture the given geometry adequately."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### How to create meshes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are several ways to create an initial mesh. Meshes can be modified or combined in many ways as discussed later on."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Using Grid Generators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The easiest way to generate meshes is to use the functions from the namespace [GridGenerator](https://www.dealii.org/current/doxygen/deal.II/namespaceGridGenerator.html). Python interface currently supports the following functions "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['generate_cheese',\n",
       " 'generate_enclosed_hyper_cube',\n",
       " 'generate_fixed_subdivided_parallelepiped',\n",
       " 'generate_general_cell',\n",
       " 'generate_half_hyper_ball',\n",
       " 'generate_hyper_ball',\n",
       " 'generate_hyper_cube',\n",
       " 'generate_hyper_cube_with_cylindrical_hole',\n",
       " 'generate_hyper_rectangle',\n",
       " 'generate_hyper_shell',\n",
       " 'generate_hyper_sphere',\n",
       " 'generate_parallelepiped',\n",
       " 'generate_parallelogram',\n",
       " 'generate_quarter_hyper_ball',\n",
       " 'generate_simplex',\n",
       " 'generate_subdivided_hyper_cube',\n",
       " 'generate_subdivided_hyper_rectangle',\n",
       " 'generate_subdivided_material_hyper_rectangle',\n",
       " 'generate_subdivided_steps_hyper_rectangle',\n",
       " 'generate_varying_subdivided_parallelepiped']"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(filter(re.compile('generate_*').match, dir(dealii.Triangulation)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Importing from external programs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The original C++ class [GridIn](https://www.dealii.org/current/doxygen/deal.II/classGridIn.html) can read many different mesh formats from a file from disk. In PyDealII, GridIn functions are called via the *Triangulation.read* method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function read:\n",
      "\n",
      "read(...)\n",
      "    read( (Triangulation)self, (str)filename, (str)format) -> None :\n",
      "        Read a mesh from the file according to the given data format.          \n",
      "        The possible formats are:                                              \n",
      "          - msh                                                                \n",
      "          - vtk\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(dealii.Triangulation.read)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Meshes can be generated from different tools like [gmsh](http://gmsh.info/), [lagrit](https://lagrit.lanl.gov/) and [cubit](https://cubit.sandia.gov/). See the documentation of [GridIn](https://www.dealii.org/current/doxygen/deal.II/classGridIn.html) for more information. The problem is that deal.II needs meshes that only consist of quadrilaterals and hexahedra – tetrahedral meshes won't work (this means tools like tetgen can not be used directly).\n",
    "\n",
    "We will describe a possible workflow using Gmsh. Gmsh is the smallest and most quickly set up open source tool we are aware of. It can generate unstructured 2d quad meshes. In 3d, it can extrude 2d meshes to get hexahedral meshes; 3D meshing of unstructured geometry into hexahedra is possible, though there are some issues with the quality of these meshes that imply that these meshes only sometimes work in deal.II.\n",
    "\n",
    "In Gmsh, a mesh is fundamentally described in a text-based .geo file whose format can contain computations, loops, variables, etc. This format is quite flexible in allowing the description of complex geometries. The mesh is then generated from a surface representation, which is built from a list of line loops, which is built from a list of lines, which are in turn built from points. The .geo script can be written and edited by hand or it can be generated automatically by creating objects graphically inside Gmsh. In many cases it is best to combine both approaches. The file can be easily reloaded by pressing \"reload\" under the \"Geometry\" tab if you want to write it by hand and see the effects in the graphical user interface of gmsh.\n",
    "\n",
    "This tutorial contains an example .geo file that describes a box with two objects cut out in the interior. This is how *example.geo* looks like in Gmsh (displaying the boundary indicators as well as the mesh discussed further down below):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<img src=\"https://www.dealii.org/images/steps/developer/step-49.gmsh_picture.png\"/>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<img src=\"https://www.dealii.org/images/steps/developer/step-49.gmsh_picture.png\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You might want to open the example.geo file in a text editor (it is located in the same directory as the *step-49.cc* source file) to see how it is structured. You can see how the boundary of the domain is composed of a number of lines and how later on we combine several lines into \"physical lines\" (or \"physical surfaces\") that list the logical lines' numbers. \"Physical\" object are the ones that carry information about the boundary indicator (see [this glossary entry](https://www.dealii.org/developer/doxygen/deal.II/DEALGlossary.html#GlossBoundaryIndicator))."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**\n",
    ">It is important that this file contain \"physical lines\" and \"physical surfaces\". These give the boundary indicators and material ids for use in deal.II. Without these physical entities, nothing will be imported into deal.II."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "deal.II's GridIn class can read the .msh format written by Gmsh and that contains a mesh created for the geometry described by the .geo file. You generate the .msh from the .geo by running the commands\n",
    "\n",
    "```javascript\n",
    "gmsh -2 example.geo\n",
    "```\n",
    "\n",
    "on the command line, or by clicking \"Mesh\" and then \"2D\" inside Gmsh after loading the file. Now, we can read in the mesh from the .msh file and visualize using the python bindings:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation = dealii.Triangulation(dim = '2D')\n",
    "triangulation.read(filename = 'example.msh', format = 'msh')\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**\n",
    "> gmsh has a number of other interfaces by which one can describe geometries to it. In particular, it has the ability to interface with scripting languages like Python and Julia, but it can also be scripted from C++. These interfaces are useful if one doesn't just want to generate a mesh for a single geometry (in which case the graphical interface or, in simple cases, a hand-written .geo file is probably the simplest approach), but instead wants to do parametric studies over the geometry for which it is necessary to generate many meshes for geometries that differ in certain parameters. Another case where this is useful is if there is already a CAD geometry for which one only needs a mesh; indeed, this can be done from within deal.II using the [Gmsh::create_triangulation_from_boundary_curve()](https://www.dealii.org/current/doxygen/deal.II/namespaceGmsh.html#ab65eb217368d006b66bcfcc6fa0f2894) function."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Modifying a Mesh\n",
    "\n",
    "After acquiring one (or several) meshes in the ways described above, there are many ways to manipulate them before using them in a finite element computation.\n",
    "\n",
    "#### Transformations\n",
    "\n",
    "The function *Triangulation.transform* allows you to transform the vertices of a given mesh using a smooth function. An example of its use is also given in the results section of [step-38](https://www.dealii.org/current/doxygen/deal.II/step_38.html) but let us show a simpler example here. Using the code below, we perturb the *y* coordinate of a mesh with a sine curve.\n",
    "\n",
    "First, let us create a triangulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation = dealii.Triangulation('2D')\n",
    "triangulation.generate_subdivided_hyper_rectangle(repetitions = [14, 2],\\\n",
    "                                                  p1 = dealii.Point([0, 0]),\\\n",
    "                                                  p2 = dealii.Point([10, 1]))\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we define a lambda function that takes a point (a list of size *dim* with coordinates), transforms it according to the formula $(x,y) \\rightarrow (x, y + \\sin(\\pi x / 5))$ and returns the result:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "sine_y_transform = lambda p: [p[0], p[1] + math.sin(p[0] / 5.0 * math.pi)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, apply this transformation and plot the result:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation.transform(transformation = sine_y_transform)\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Similarly, we can transform a regularly refined unit square to a wall-adapted mesh in y direction using the formula $(x,y) \\rightarrow (x, \\tanh(2y) / \\tanh(2))$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation = dealii.Triangulation('2D')\n",
    "triangulation.generate_subdivided_hyper_rectangle(repetitions = [20, 20],\\\n",
    "                                                  p1 = dealii.Point([0, 0]),\\\n",
    "                                                  p2 = dealii.Point([1, 1]))\n",
    "plot_triangulation(triangulation)\n",
    "\n",
    "tanh_y_transform = lambda p: [p[0], math.tanh(2. * p[1]) / math.tanh(2.)]\n",
    "triangulation.transform(transformation = tanh_y_transform)\n",
    "\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, the function *distort_random* allows you to move vertices in the mesh (optionally ignoring boundary nodes) by a random amount. This is demonstrated in below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation = dealii.Triangulation('2D')\n",
    "triangulation.generate_subdivided_hyper_rectangle(repetitions = [16, 16],\\\n",
    "                                                  p1 = dealii.Point([0, 0]),\\\n",
    "                                                  p2 = dealii.Point([1, 1]))\n",
    "plot_triangulation(triangulation)\n",
    "\n",
    "triangulation.distort_random(factor = 0.3, keep_boundary = True)\n",
    "\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function is primarily intended to negate some of the superconvergence effects one gets when studying convergence on regular meshes, as well as to suppress some optimizations in deal.II that can exploit the fact that cells are similar in shape. (Superconvergence refers to the fact that if a mesh has certain symmetries – for example, if the edges running into a vertex are symmetric to this vertex, and if this is so for all vertices of a cell – that the solution is then often convergent with a higher order than one would have expected from the usual error analysis. In the end, this is a result of the fact that if one were to make a Taylor expansion of the error, the symmetry leads to the fact that the expected next term of the expansion happens to be zero, and the error order is determined by the second next term. A distorted mesh does not have these symmetries and consequently the error reflects what one will see when solving the equation on any kind of mesh, rather than showing something that is only reflective of a particular situation.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Merging Meshes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The method *Triangulation.merge_triangulations* allows you to merge two given *Triangulation* objects into a single one. For this to work, the vertices of the shared edge or face have to match exactly. Lining up the two meshes can be achieved using *Triangulation.shift* and *Triangulation.scale*. In the code section below, we merge a square with a round hole. The method *Triangulation.subdivided_hyper_rectangle* allows you to specify the number of repetitions and the positions of the corners, so there is no need to shift the triangulation manually here. You should inspect the mesh graphically to make sure that cells line up correctly and no unpaired nodes exist in the merged Triangulation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create and plot the input meshes:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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oUxh4O7LyYSh7WX1bc47MLfQbSV6c+fOZf78+VUVjd/97neMHz+egQMHxj2UVNEnQgWAyZMn8+abb7JhQ8nvdkfC3Sv6CGNJpmgIAD169GDGjBlV8wWw559/nubmZsaNGxf3UFJH0ZBDZs6cyf3338+nn34a91Dyat3LqKYv2CWFoiGHnHTSSVx44YXcf//9cQ+lQ9u3b+fpp5/myiuvjHsoqaRoyGFavwAWxseNy+Wee+5h6tSp9O7dO+6hpJKiIYcZP348n3/+OatXr457KFm1tLRw11136QXQGCkacpguXbowe/bsip2Q6KmnnuKkk07Sl9NipGjIEa666iqWL1/Ojh074h7KEfQ2a/wUDTnCcccdxze/+U3uueeeuIdymI0bN/LKK68wZcqUuIeSaoqGZFWJM7TX19czffr0iprJPo0UDclq1KhRnHjiiSxfXhmf8N+3bx9LliypuJns00jRkJzMjKuvvprf/OY37Nq1K5YxtLS08NhjjzF27Fj+9re/cfTRR8cyDvmCoiFZ1dXVsXbtWm6//Xaampo49dRTufrqq3nppZciuf3t27fz85//nKFDh/LrX/+aH/7wh5x88skMHz6c7du3RzIGyU7RkCPU1dWxcuVKVq9ezZVXXsmSJUvYuHEjI0aMYNq0aZx11lksXrw49EMpujurVq1i2rRpfOUrX+GDDz7gD3/4Ay+88AJXXHEFGzZsoF+/fgpH3Ny96k6jR4/2fKZMmeJLly7Nu54cbuLEid69e3dfs2ZN1uUtLS3+1FNP+aRJk/yEE07wH/3oR/7222+XdJt79uzx+fPn+xlnnOHDhw/3O+64w//6179mXbe5udlramq8V69evm3btpJuN43MzA8cOJB3PaDRc/z7056GHNJ2D6O2tjbrOl27dqWuro4nn3ySNWvW0L17d84//3wmTJjA448/TktLS8G3t379eubOncvgwYN59tln+e1vf8uGDRv4/ve/T69evbJu061bN+1xxKykaJjZ8Wb272a2Mfh5XJZ1TjazP5nZG2b2upn9sM2yn5rZf5rZq8GprpTxSOcVEoz2hg4dys0338yWLVu44ooruOWWWzjllFP4xS9+wUcffZR1m/379/P73/+eCy64gIsuuoi+ffvS1NTEQw89xPjx4wv61qrCEbNcuyCFnIBfAfOC8/OAW7KscyIwKjh/LPA2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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tria_1 = dealii.Triangulation('2D')\n",
    "tria_1.generate_hyper_cube_with_cylindrical_hole(inner_radius = .25, outer_radius = 1.)\n",
    "\n",
    "plot_triangulation(tria_1)\n",
    "\n",
    "tria_2 = dealii.Triangulation('2D')\n",
    "tria_2.generate_subdivided_hyper_rectangle(repetitions = [3, 2],\\\n",
    "                                           p1 = dealii.Point([1., -1.]),\\\n",
    "                                           p2 = dealii.Point([4., 1.]))\n",
    "plot_triangulation(tria_2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now merge triangulations and plot the resulting mesh"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tria_merged = dealii.Triangulation('2D')\n",
    "tria_merged.merge_triangulations([tria_1, tria_2])\n",
    "plot_triangulation(tria_merged)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Moving Vertices\n",
    "\n",
    "Here we show the ability to pick individual vertices and move them around in an existing mesh. Note that this has the potential to produce degenerate or inverted cells and you shouldn't expect anything useful to come of using such meshes. Here, we create a box with a cylindrical hole that is not exactly centered by moving the top vertices upwards:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "triangulation = dealii.Triangulation('2D')\n",
    "triangulation.generate_hyper_cube_with_cylindrical_hole(inner_radius = .25, outer_radius = 1.)\n",
    "\n",
    "for cell in triangulation.active_cells():\n",
    "    for i in range(4):\n",
    "        v = cell.get_vertex(i)\n",
    "        \n",
    "        if(abs(v.y - 1.0) < 1e-5):\n",
    "            v.y += 0.5\n",
    "            \n",
    "        cell.set_vertex(i, v)\n",
    "        \n",
    "triangulation.refine_global(2)\n",
    "\n",
    "plot_triangulation(triangulation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Extruding Meshes\n",
    "\n",
    "If you need a 3d mesh that can be created by extruding a given 2d mesh (that can be created in any of the ways given above), you can use the function *Triangulation.extrude_triangulation*. See code below for an example. Note that for this particular case, the given result could also be achieved using the 3d version of *Triangulation.generate_hyper_cube_with_cylindrical_hole*. The main usage is a 2d mesh, generated for example with Gmsh, that is read in from a .msh file as described above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "tria = dealii.Triangulation('2D')\n",
    "tria.generate_hyper_cube_with_cylindrical_hole(inner_radius = .25, outer_radius = 1.)\n",
    "\n",
    "tria_extruded = dealii.Triangulation('3D')\n",
    "tria.extrude_triangulation(n_slices = 3, depth = 2.0, tria_out = tria_extruded)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since we cannot easily visualize 3d mesh, let's save it in the EPS format and then plot the image (this requires *pillow* package to be installed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f8435432a58>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tria_extruded.write('extruded_mesh.eps', format = 'eps')\n",
    "img = matplotlib.image.imread('extruded_mesh.eps')\n",
    "\n",
    "fig = plt.figure(figsize = (12,12))\n",
    "ax = fig.add_subplot(111)\n",
    "ax.imshow(img, interpolation='none')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### After you have a coarse mesh\n",
    "\n",
    "Creating a coarse mesh using the methods discussed above is only the first step. When you have it, it will typically serve as the basis for further mesh refinement. This is not difficult — in fact, there is nothing else to do — if your geometry consists of only straight faces. However, this is often not the case if you have a more complex geometry and more steps than just creating the mesh are necessary. We will go over some of these steps in the section below."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Next steps: Curved Cells\n",
    "\n",
    "As mentioned in the introduction, creating a coarse mesh using the methods discussed here is only the first step. In order to refine a mesh, the *Triangulation* needs to know where to put new vertices on the mid-points of edges, faces, and cells. By default, these new points will be placed at the arithmetic mean of the surrounding points, but this isn't what you want if you need curved boundaries that aren't already adequately resolved by the coarse mesh. \n",
    "\n",
    "To illustrate this process in more detail, let us consider an example created by Yuhan Zhou as part of a 2013 semester project at Texas A&M University. The goal was to generate (and use) a geometry that describes a microstructured electric device. In a CAD program, the geometry looks like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.1.png\">\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.1.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the following, we will walk you through the entire process of creating a mesh for this geometry, including a number of common pitfalls by showing the things that can go wrong.\n",
    "\n",
    "The first step in getting there was to create a coarse mesh, which was done by creating a 2d coarse mesh for each of cross sections, extruding them into the third direction, and gluing them together. The following code does this, using the techniques previously described:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_3d_grid():\n",
    "    # Generate first cross section\n",
    "    vertices_1 = [[-1.5, 0.], [-0.5, 0.], [0.5, 0.], [1.5, 0.],\\\n",
    "              [-1.5, 1.5], [-0.5, 1.5], [0.5, 1.5], [1.5, 1.5],\\\n",
    "              [-1.5, 3.], [-0.5, 3.], [0.5, 3.], [1.5, 3.],\\\n",
    "              [-0.5, 3 + 0.5 * math.sqrt(3)],\\\n",
    "              [0.5, 3 + 0.5 * math.sqrt(3)],\\\n",
    "              [-0.75, 3 + 0.75 * math.sqrt(3)],\\\n",
    "              [0.75, 3 + 0.75 * math.sqrt(3)]]\n",
    "\n",
    "    cell_vertices_1 = [[0, 1, 4, 5],\n",
    "                   [1, 2, 5, 6],\n",
    "                   [3, 7, 2, 6],\n",
    "                   [4, 5, 8, 9],\n",
    "                   [5, 6, 9, 10],\n",
    "                   [7, 11, 6, 10],\n",
    "                   [8, 9, 14, 12],\n",
    "                   [9, 10, 12, 13],\n",
    "                   [11, 15, 10, 13],\n",
    "                   [14, 12, 15, 13]]\n",
    "\n",
    "    # Given a list of points and how vertices connect to cells, create a mesh.\n",
    "    tria_2d_1 = dealii.Triangulation('2D')\n",
    "    tria_2d_1.create_triangulation(vertices_1, cell_vertices_1)\n",
    "\n",
    "    # Then extrude it into a 3d piece\n",
    "    tria_3d_1 = dealii.Triangulation('3D')\n",
    "    tria_2d_1.extrude_triangulation(n_slices = 5, depth = 2.5, tria_out = tria_3d_1)\n",
    "\n",
    "    # Now do the same with the second volume\n",
    "    vertices_2 = [[-2.5, 0.],\n",
    "              [-1.5, 0.],\n",
    "              [-0.5, 0.],\n",
    "              [0.5, 0.],\n",
    "              [1.5, 0.],\n",
    "              [2.5, 0.],\n",
    "              [-2.5, 1.5],\n",
    "              [-1.5, 1.5],\n",
    "              [-0.5, 1.5],\n",
    "              [0.5, 1.5],\n",
    "              [1.5, 1.5],\n",
    "              [2.5, 1.5],\n",
    "              [-2.5, 3.],\n",
    "              [-1.5, 3.],\n",
    "              [-0.5, 3.],\n",
    "              [0.5, 3.],\n",
    "              [1.5, 3.],\n",
    "              [2.5, 3.],\n",
    "              [-0.5, 3. + 0.5 * math.sqrt(3)],\n",
    "              [0.5, 3. + 0.5 * math.sqrt(3)],\n",
    "              [-0.75, 3. + 0.75 * math.sqrt(3)],\n",
    "              [0.75, 3. + 0.75 * math.sqrt(3)],\n",
    "              [-1.25, 3. + 1.25 * math.sqrt(3)],\n",
    "              [1.25, 3. + 1.25 * math.sqrt(3)]]\n",
    "\n",
    "    cell_vertices_2 = [[0, 1, 6, 7],\n",
    "                   [1, 2, 7, 8],\n",
    "                   [2, 3, 8, 9],\n",
    "                   [4, 10, 3, 9],\n",
    "                   [5, 11, 4, 10],\n",
    "                   [6, 7, 12, 13],\n",
    "                   [7, 8, 13, 14],\n",
    "                   [8, 9, 14, 15],\n",
    "                   [10, 16, 9, 15],\n",
    "                   [11, 17, 10, 16],\n",
    "                   [12, 13, 22, 20],\n",
    "                   [13, 14, 20, 18],\n",
    "                   [14, 15, 18, 19],\n",
    "                   [16, 21, 15, 19],\n",
    "                   [17, 23, 16, 21],\n",
    "                   [20, 18, 21, 19],\n",
    "                   [22, 20, 23, 21]]\n",
    "\n",
    "    tria_2d_2 = dealii.Triangulation('2D')\n",
    "    tria_2d_2.create_triangulation(vertices_2, cell_vertices_2)\n",
    "\n",
    "    tria_3d_2 = dealii.Triangulation('3D')\n",
    "    tria_2d_2.extrude_triangulation(n_slices = 5, depth = 2.5, tria_out = tria_3d_2)\n",
    "\n",
    "    # Also shift this triangulation in the z-direction so that it matches the\n",
    "    # end face of the first part\n",
    "    tria_3d_2.shift([0, 0, 2.5])\n",
    "\n",
    "    # Now first merge these two pieces, then shift the first piece in\n",
    "    # z-direction beyond the second, and merge the shifted piece with the two\n",
    "    # previously merged one into the final one:\n",
    "    tria_3d_tmp = dealii.Triangulation('3D')\n",
    "    tria_3d_tmp.merge_triangulations(tria_3d_1, tria_3d_2)\n",
    "\n",
    "    tria_3d_1.shift([0, 0, 5.])\n",
    "\n",
    "    triangulation = dealii.Triangulation('3D')\n",
    "    triangulation.merge_triangulations(tria_3d_tmp, tria_3d_1)\n",
    "\n",
    "    return triangulation\n",
    "\n",
    "triangulation = create_3d_grid()\n",
    "# triangulation.write('coarse.vtk', 'vtk')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This creates the following mesh:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.8.png\">\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.8.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This mesh has the right general shape, but the top cells are now polygonal: their edges are no longer along circles and we do not have a very accurate representation of the original geometry. The next step is to teach the top part of the domain that it should be curved. Put another way, all calculations done on the top boundary cells should be done in cylindrical coordinates rather than Cartesian coordinates. We can do this by creating a *CylindricalManifold* object and associating it with the cells above $y=3$. This way, when we refine the cells on top, we will place new points along concentric circles instead of straight lines.\n",
    "\n",
    "In this case, with the CylindricalManifold constructed below, the geodesics are arcs along circles orthogonal to the $z$-axis centered along the line $(0,3,z)$.\n",
    "\n",
    "Since all three top parts of the domain use the same geodesics, we will mark all cells with centers above the $y=3$ line as being cylindrical in nature:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "triangulation = create_3d_grid()\n",
    "\n",
    "cylinder = dealii.Manifold(dim = 3, spacedim = 3)\n",
    "cylinder.create_cylindrical(direction = [0., 0., 1.], axial_point = [0, 3., 0.])\n",
    "\n",
    "cylinder_id = 8\n",
    "\n",
    "triangulation.set_manifold(number = cylinder_id, manifold = cylinder)\n",
    "\n",
    "for cell in triangulation.active_cells():\n",
    "    if cell.center().y >= 3.:\n",
    "        cell.set_all_manifold_ids(cylinder_id)\n",
    "        \n",
    "triangulation.refine_global(1)\n",
    "\n",
    "triangulation.write('coarse.vtk', 'vtk')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With this code, we get a mesh that looks like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.9.png\">\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.9.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This change fixes the boundary but creates a new problem: the cells adjacent to the cylinder's axis are badly distorted. We should use Cartesian coordinates for calculations on these central cells to avoid this issue. The cells along the center line all have a face that touches the line $(0,3,z)$ so, to implement this, we go back and overwrite the manifold_ids on these cells to be zero (which is the default):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "triangulation = create_3d_grid()\n",
    "\n",
    "triangulation.set_manifold(number = cylinder_id, manifold = cylinder)\n",
    "\n",
    "for cell in triangulation.active_cells():\n",
    "    if cell.center().y >= 3.:\n",
    "        cell.set_all_manifold_ids(cylinder_id)\n",
    "        \n",
    "flat_manifold_id = -1\n",
    "for cell in triangulation.active_cells():\n",
    "    for face in cell.faces():\n",
    "        face_center = face.center()\n",
    "        if abs(face_center.x) < 1.0e-5 and\\\n",
    "           abs(face_center.y - 3.0) < 1.0e-5:\n",
    "            cell.set_all_manifold_ids(flat_manifold_id)\n",
    "        \n",
    "triangulation.refine_global(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can finally save the mesh now:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "triangulation.write('final.vtk', 'vtk')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This gives us a good mesh, where cells at the center of each circle are still Cartesian and cells around the boundary lie along a circle. We can really see the nice detail of the boundary fitted mesh if we refine two more times:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.11.png\">\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<img src=\"https://www.dealii.org/images/steps/developer/step-49.yuhan.11.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
